package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import excepcion.DAOExcepcion;
import modelo.Aviso;
import util.ConexionBD;
//import java.util.Date;

public class AvisoDao extends BaseDAO{

	public Collection<Aviso> buscarPorTitulo(String titulo)
			throws DAOExcepcion {
		String query = "select idavisos, titulo, mensaje, fechainicio, fechafin, ubicacion from avisos where titulo like ?";
		Collection<Aviso> lista = new ArrayList<Aviso>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + titulo + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				Aviso vo = new Aviso();
				vo.setIdAvisos(rs.getInt("idavisos"));
				vo.setTitulo(rs.getString("titulo"));
				vo.setMensaje(rs.getString("mensaje"));
				vo.setFechaInicio(rs.getString("fechainicio"));
				vo.setFechaFin(rs.getString("fechafin"));
				vo.setUbicacion(rs.getString("ubicacion"));				
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}
	
	public String insertar(Aviso vo) throws DAOExcepcion {

		String query = "insert into avisos(titulo,mensaje,fechainicio,fechafin,ubicacion,usuarios_usuario) values (?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		String mensaje = "";
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getTitulo());
			stmt.setString(2, vo.getMensaje());
			stmt.setString(3, vo.getFechaInicio());
			stmt.setString(4, vo.getFechaFin());
			stmt.setString(5, vo.getUbicacion());
		//	stmt.setInt(6, vo.getAdministrador().getIdAdministrador());
			stmt.setString(6, vo.getUsuario().getUser());
		
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			
			}
			mensaje = "Se registro correctamente el Aviso.";
			System.out.println(mensaje);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			if(((String)e.getMessage()).equals("Column 'titulo' cannot be null")){
				System.out.println("El campo titulo debe ser llenado");
			} else if (((String)e.getMessage()).equals("Column 'mensaje' cannot be null")){
				System.out.println("El campo Mensaje debe ser llenado");
			} else if (((String)e.getMessage()).equals("Column 'fechainicio' cannot be null")){
				System.out.println("El campo Fecha Inicio debe ser llenado");
			} else if (((String)e.getMessage()).equals("Column 'fechafin' cannot be null")){
				System.out.println("El campo Fecha Fin debe ser llenado");
			}else if (((String)e.getMessage()).equals("Column 'ubicacion' cannot be null")){
				System.out.println("El campo Ubicacion debe ser llenado");
			}
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return mensaje;
	}
	
	public Aviso obtener(int idAvisos) throws DAOExcepcion {
		Aviso vo =  null ;
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select * from avisos where idavisos=?";
			//idavisos, titulo, mensaje, fechainicio, fechafin, ubicacion from avisos where idavisos=?
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idAvisos);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo = new Aviso();
				vo.setIdAvisos(rs.getInt(1));
				vo.setMensaje(rs.getString(2));
				vo.setFechaInicio(rs.getString(3));
				vo.setFechaFin(rs.getString(4));
				vo.setUbicacion(rs.getString(5));
			//	vo.setAdministrador(rs.getAdministrador(6));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	

	public Aviso obtenerPorFecha(String fecha) throws DAOExcepcion {
		Aviso vo =  null ;
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select * from avisos where fechainicio=?";
			//idavisos, titulo, mensaje, fechainicio, fechafin, ubicacion from avisos where idavisos=?
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, fecha);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo = new Aviso();
				vo.setIdAvisos(rs.getInt(1));
				vo.setMensaje(rs.getString(2));
				vo.setFechaInicio(rs.getString(3));
				vo.setFechaFin(rs.getString(4));
				vo.setUbicacion(rs.getString(5));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
}
